package com.nbcio.im.core;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * IM群组实体
 *
 * @author nbacheng
 */
@Data
@TableName("im_group")
public class ImGroup {
    
    /**
     * 群组ID
     */
    @TableId(value = "group_id", type = IdType.INPUT)
    private String groupId;
    
    /**
     * 租户ID
     */
    @TableField("tenant_id")
    private String tenantId;
    
    /**
     * 群组名称
     */
    @TableField("group_name")
    private String groupName;
    
    /**
     * 群组头像
     */
    @TableField("avatar")
    private String avatar;
    
    /**
     * 群组描述
     */
    @TableField("description")
    private String description;
    
    /**
     * 群主用户ID
     */
    @TableField("owner_id")
    private Long ownerId;
    
    /**
     * 群组类型：normal, super
     */
    @TableField("group_type")
    private String groupType;
    
    /**
     * 最大成员数
     */
    @TableField("max_members")
    private Integer maxMembers;
    
    /**
     * 当前成员数
     */
    @TableField("member_count")
    private Integer memberCount;
    
    /**
     * 群组状态：active, inactive, disbanded
     */
    @TableField("status")
    private String status;
    
    /**
     * 是否允许邀请
     */
    @TableField("allow_invite")
    private Integer allowInvite;
    
    /**
     * 是否允许群成员修改群信息
     */
    @TableField("allow_member_modify")
    private Integer allowMemberModify;
    
    /**
     * 是否允许群成员邀请
     */
    @TableField("allow_member_invite")
    private Integer allowMemberInvite;
    
    /**
     * 创建时间
     */
    @TableField("create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    @TableField("update_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    
    /**
     * 群成员列表（非数据库字段）
     */
    @TableField(exist = false)
    private List<ImGroupMember> members;
}
